export default {
  namespaced: true,
  state: {
    cart: uni.getStorageSync('cart') || []
  },
  mutations: {
    // 修改所有商品的选中状态
    checkAllStatus(state, bol) {
      state.cart.forEach(item => {
        item.goods_status = bol
      })
      // 修改购物车数据，重新保存在本地
      uni.setStorageSync('cart', state.cart)
    },
    // 删除购物车中的商品
    removeGoods(state, goods_id) {
      const goodsArr = state.cart.filter(item => item.goods_id !== +goods_id)
      // 将数据重新保存起来
      state.cart = goodsArr
      // 将数据保存在本地
      uni.setStorageSync('cart', state.cart)
    },
    // 改变购物车数量
    changeCount(state, goodsObj) {
      const obj = state.cart.find(item => item.goods_id === goodsObj.goods_id)
      // 判断对象中的数量
      if (obj) {
        obj.goods_count = goodsObj.goods_count
      }
      uni.setStorageSync("cart", state.cart)
    },
    // 选中改变状态
    changeStatus(state, goodsObj) {
      const obj = state.cart.find(item => item.goods_id === goodsObj.goods_id)
      // 如果对象存在就要改变状态
      if (obj) {
        obj.goods_status = goodsObj.goods_status
      }
      uni.setStorageSync('cart', state.cart)
    },
    // 定义加入购物车的方法
    addToCart(state, goodsObj) {
      // 由于同一件商品我们会往购物车添加多次，所以要判断购物车之前是否存在数据
      const obj = state.cart.find(item => item.goods_id === goodsObj.goods_id)
      // 判断obj在不在购物车里面
      if (!obj) {
        // 当商品不在购物车里面就直接添加到购物车里面
        state.cart.push(goodsObj)
      } else {
        // 当前商品存在。直接让count+1
        obj.goods_count += 1
      }
      // console.log(state.cart);
      // 将数据保存至本地
      uni.setStorageSync('cart', state.cart)
    }
  },
  actions: {},
  getters: {
    total(state) {
      // 根据cart得到商品总数
      // let sum=0
      // state.cart.forEach(item=>{
      //   sum += item.goods_count
      // })
      // return sum
      const sum = state.cart.reduce((sum, item) =>
        sum += item.goods_status ? item.goods_count : 0, 0)
      return sum
    },
    // 判断是否所有的状态都处于全选的状态
    isCheckAll(state) {
      return state.cart.every(item => item.goods_status)
    },
    // 计算总的价格s
    total_price(state) {
     return state.cart.reduce((sum, item) => 
         sum += item.goods_status ?  item.goods_count * item.goods_price : 0
      , 0)
    }
  }
}
